home *** CD-ROM | disk | FTP | other *** search
-
- «PG»
-
- 10 REM PI.BAS -- Performance Index Benchmark Program
- 20 REM Copyright (C) MicroWay, Inc., 1986
- 30 REM MicroWay, Inc. PO Box 79 Kingston MA 02364 (617) 746-7341
- 40 REM
- 50 REM Does not use Numeric Coprocessor (8087 or 80287). See PI87.BAS for
- 60 REM a similar program which does use the Numeric Coprocessor.
- 70 REM Compiled with IBM BASIC Compiler V2.00 (/O switch). Linked with
- 80 REM assembly language subroutines:
- 90 REM DBB4 DBBCACHE DBB16 CB4 CB16 IA XFER TIME100
- 100 REM
- 110 DEFINT A-Y
- 120 DIM NAME$ (11), SECTION$ (11), ZF (11), ZP (11)
- 130 DIM DSRC (10249), DDEST (10249)
- 140 COMMON DSRC (), DDEST (), SPC1!, SPC2!, SPC3!, SVA!, SVB!
- 150 DEF FNS# (X$) = 60# * (60# * VAL (MID$ (X$, 1, 2)) + VAL (MID$ (X$, 4, 2))) + VAL (MID$ (X$, 7, 2)) + .01# * VAL (MID$ (X$, 10, 2))
- 160 LINES$ = "" : FOR I = 1 TO 69 : LINES$ = LINES$ + CHR$ (205) : NEXT I
- 170 PRINT CHR$ (201); LINES$; CHR$ (187)
- 180 PRINT CHR$ (186); " M i c r o W a y P e r f o r m a n c e I n d e x P r o g r a m "; CHR$ (186)
- 190 PRINT CHR$ (200); LINES$; CHR$ (188)
- 200 PRINT " Copyright (C) MicroWay, Inc., 1986."
- 210 PRINT " (This version does not use the Numeric Coprocessor)"
- 220 PRINT
- 230 DATA 0.6013,0.5607,0.6,0.6,0.595,0.589,0.62,0.6,0.6,0.6064,0.6064
- 240 DATA " 1"," 2"," 3"," 4"," 5"," 6"," 7"," 8"," 9","10","11"
- 250 DATA "Floating point -- arithmetic "
- 260 DATA "Floating point -- Savage (transcendentals) "
- 270 DATA "Data bus bound -- 4K bytes of instructions "
- 280 DATA "Data bus bound -- 4K bytes of register moves "
- 290 DATA "Data bus bound -- 16K bytes of instructions "
- 300 DATA "Clock bound -- 4K byte block moves "
- 310 DATA "Clock bound -- 16K byte block moves "
- 320 DATA "Integer multiply and divide "
- 330 DATA "Subroutine calls and stack operations "
- 340 DATA "Disk I/O -- sequential read from random file "
- 350 DATA "Disk I/O -- sequential write to random file "
- 360 DATA 25,25,11.111111,11.111111,11.111111,8.333333,8.333333,0,0,0,0
- 370 CALL TIME100
- 380 FIRSTTIME = 1
- 390 FOR I = 1 TO 11 : READ ZF (I) : NEXT I
- 400 FOR I = 1 TO 11 : READ SECTION$ (I) : NEXT I
- 410 FOR I = 1 TO 11 : READ NAME$ (I) : NEXT I
- 420 FOR I = 1 TO 11 : READ ZP (I) : NEXT I
- 430 MAXWRITES = 20 : MAXREADS = 20
- 440 GOTO 570
- 450 REM *** Create file so that reads will have something to work on
- 460 REM *** and so that writes will not have to create new records.
- 470 IF MAXWRITES > MAXREADS THEN MPUT = MAXWRITES : ELSE MPUT = MAXREADS
- 480 OPEN "TEMP.TMP" FOR RANDOM AS #1 LEN=2048
- 490 FIELD #1, 2048 AS S$
- 500 T$ = "" : FOR I=0 TO 1023 : T$ = T$ + MKI$ (256 * RND (I)) : NEXT I
- 510 LSET S$ = T$
- 520 FOR I = 1 TO MPUT : PUT #1, I : NEXT I : CLOSE #1
- 530 PRINT "Please enter percentage of benchmark devoted to each operation."
- 540 FOR I = 1 TO 11
- 550 PRINT "Section ";SECTION$ (I);" ";NAME$ (I);": "; : INPUT "", ZP (I)
- 560 NEXT I
- 570 ZT = 0 : FOR I = 1 TO 11 : ZT = ZT + ZP (I) : NEXT I
- 580 IF ZT > 99.5 AND ZT < 100.5 THEN GOTO 640
- 590 PRINT : PRINT "Caution: percentages total "; ZT;
- 600 INPUT " Adjust to 100% ? ", ADJ$ : PRINT : ADJ$ = LEFT$ (ADJ$, 1)
- 610 IF ADJ$ = "Y" OR ADJ$ = "y" THEN GOTO 630
- 620 IF ADJ$ = "N" OR ADJ$ = "n" THEN GOTO 660 : ELSE GOTO 600
- 630 IF ZT = 0! THEN GOTO 840
- 640 Z100 = 1# / ZT : FOR I = 1 TO 11 : ZP (I) = ZP (I) * Z100 : NEXT I
- 650 ZT = 100# : GOTO 670
- 660 FOR I = 1 TO 11 : ZP (I) = .01 * ZP (I) : NEXT I
- 670 PRINT "Section Description Performance Index"
- 680 PRINT "======= ============================================= ================="
- 690 ZTET = 0# : FOR J = 1 TO 11
- 700 ZITER = 60# * ZP (J) / ZF (J)
- 710 ITER = INT (ZITER) : IF ZITER - ITER > .1 THEN ITER = ITER + 1
- 720 REM 1 2 3 4 5 6 7 8 9 10 11
- 730 ON J GOSUB 930,970,1000,1010,1020,1030,1040,1050,1060,1070,1140
- 740 ZET = FNS# (B$) - FNS# (A$)
- 750 IF ITER <> 0 THEN ZET = ZET * ZITER / ITER : ELSE ZET = 0#
- 760 PRINT " ";SECTION$ (J);" ";NAME$ (J);" ";
- 770 IF ZET = 0 THEN PRINT " ----" : GOTO 790
- 780 PRINT USING "###.##"; ZF (J) * ZITER / ZET
- 790 ZTET = ZTET + ZET
- 800 NEXT J
- 810 PRINT : PRINT "Performance index for entire benchmark is ";
- 820 IF ZTET = 0 THEN PRINT "not meaningful." : GOTO 840
- 830 PRINT USING "###.##"; .6# * ZT / ZTET
- 840 PRINT
- 850 INPUT "Would you like to run again, specifying the section weights yourself? ", MORE$ : MORE$ = LEFT$ (MORE$, 1)
- 860 IF MORE$ = "Y" OR MORE$ = "y" THEN GOTO 900
- 870 IF MORE$ = "N" OR MORE$ = "n" THEN GOTO 880 : ELSE GOTO 840
- 880 IF FIRSTTIME > 1 THEN KILL "TEMP.TMP"
- 890 END
- 900 PRINT : FIRSTTIME = FIRSTTIME + 1
- 910 IF FIRSTTIME = 2 THEN GOTO 450 : ELSE GOTO 530
- 920 REM *** Arithmetic (common subexpressions)
- 930 A$ = TIME$ : FOR I = 1 TO ITER : ZA# = 0# : FOR K = 1 TO 114
- 940 ZB# = (ZA# + 1#) * (ZA# + 2#) / (ZA# + 3#) + (ZA# + 2#) * (ZA# + 3#) / (ZA# + 1#) + (ZA# + 3#) * (ZA# + 1#) / (ZA# + 2#)
- 950 NEXT K : NEXT I : B$ = TIME$ : RETURN
- 960 REM *** Savage (transcendentals and trigonometrics)
- 970 A$ = TIME$ : FOR I = 1 TO ITER : ZA# = 1# : FOR K = 1 TO 9
- 980 ZA# = TAN (ATN (EXP (LOG (SQR (ZA# * ZA#))))) + 1#
- 990 NEXT K : NEXT I : B$ = TIME$ : RETURN
- 1000 A$ = TIME$ : FOR I = 1 TO ITER : CALL DBB4 : NEXT I : B$ = TIME$ : RETURN
- 1010 A$ = TIME$ : FOR I = 1 TO ITER : CALL DBBCACHE:NEXT I: B$ = TIME$ : RETURN
- 1020 A$ = TIME$ : FOR I = 1 TO ITER : CALL DBB16 : NEXT I : B$ = TIME$ : RETURN
- 1030 A$ = TIME$ : FOR I = 1 TO ITER : CALL CB4 : NEXT I : B$ = TIME$ : RETURN
- 1040 A$ = TIME$ : FOR I = 1 TO ITER : CALL CB16 : NEXT I : B$ = TIME$ : RETURN
- 1050 A$ = TIME$ : FOR I = 1 TO ITER : CALL IA : NEXT I : B$ = TIME$ : RETURN
- 1060 A$ = TIME$ : FOR I = 1 TO ITER : CALL XFER : NEXT I : B$ = TIME$ : RETURN
- 1070 REM *** Random reads
- 1080 IF ITER = 0 THEN A$=TIME$ : B$=A$ : RETURN
- 1090 OPEN "TEMP.TMP" FOR RANDOM AS #1 LEN=2048
- 1100 FIELD #1, 2048 AS S$
- 1110 A$ = TIME$
- 1120 FOR K = 1 TO ITER : FOR I = 1 TO MAXREADS : GET #1, I : NEXT I : NEXT K
- 1130 B$ = TIME$ : CLOSE #1 : RETURN
- 1140 REM *** Random writes
- 1150 IF ITER = 0 THEN A$=TIME$ : B$=A$ : RETURN
- 1160 OPEN "TEMP.TMP" FOR RANDOM AS #1 LEN=2048
- 1170 FIELD #1, 2048 AS S$ : LSET S$ = T$
- 1180 A$ = TIME$
- 1190 FOR K = 1 TO ITER : FOR I = 1 TO MAXWRITES : PUT #1, I : NEXT I : NEXT K
- 1200 B$ = TIME$ : CLOSE #1 : RETURN
-
- «PG»